문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 유니티(게임 엔진) (문단 편집) ==== 제한적인 멀티스레드 기능 ==== 유니티 API가 메인 스레드 외에서는 호출이 안전하지 않기 때문에[* Thread-Unsafe는 여러 스레드가 동일한 레지스터에 동시 접근해서 잘못된 결과를 내는 것을 말한다.] 제한적으로만 멀티 스레드를 적용할 수 있으며 결국 이를 통해서 높은 성능 향상을 꾀할 수는 없다. 유니티 API가 없는 순수한 연산 집약적 동작을 병렬 처리하는 것인데, 이는 전체 동작에 대한 완전 병렬화가 아니다. 또한 연산 관련 코드에서 API를 통하지 않는 경우는 많지 않으면서, 대부분의 연산 능력을 API에서 요구하기 때문. 즉, 병렬화가 되는 부분이 극히 일부이기 때문에 높은 이득을 취할 수는 없다. [[암달의 법칙]] 참고. 설령 어찌해서 구현했다 해도 노력 대비 얻는 성능 향상이 크지 않아서 이를 동적 로딩([[로딩#s-2.2|프리로드]])에 응용하는 경우도 볼 수 있는데, 마찬가지로 유니티 API를 멀티스레드에서 안전하게 사용할 수 없으니 완벽한 동적 로딩을 구현하기는 힘들고 성능 향상도 기대에 미치지는 못한다. '''즉, 고도의 편법을 완벽하게 익혀서 문제가 될 부분을 최소화하여 적용하지 않는 이상, 성능 이슈가 될 가능성이 높은 부분을 병렬화하지 못해 0번 코어만 죽어라 갈구는 경우가 될 가능성이 높다는 것이다.''' 실제로 유니티 엔진 4로 개발된 로켓 발사 시뮬레이션 게임인 [[Kerbal Space Program]]은 시뮬레이션 특성상 물리연산을 엄청 빡세게 하는데 이 물리연산 스레드를 코어 하나가 전부 감당해야 하기 때문에 어디가서 성능 좀 된다 하는 CPU도 부품이 많아지면 프레임을 제대로 못뽑는 상황이 무조건 발생한다. 이때문에 개발자가 유니티 엔진 5로 엔진을 갈아타는(!) 작업을 완료해 업데이트를 했지만, 그나마도 우주선 하나당 코어 하나씩 분담시키는 수준이 한계라고 밝혔다. 멀티스레딩이 안되어서 생기는 문제의 아주 대표적인 예. 물론, 이 문제는 KSP 못지 않게 연산량이 드럽게 많은 [[시티즈: 스카이라인]]도 마찬가지인데[* '''i9를 넣어도 3배속 플레이가 안 된다.(!!!)'''], 이 게임은 아예 유니티 본사 측에서 기술 지원을 해줬다(...). 그나마도 8스레드까지 인식하지만 실질적인 스레드 분담은 4스레드까지. 그래서 짝퉁 멀티코어 지원이라고 까이고 있다. 다수의 저성능 코어를 [[big.LITTLE#s-2.3|빅 리틀 솔루션]]까지 적용해가며 끌어모은 모바일 환경은 물론, 각 코어당 성능이 높은 편인 PC에서까지 영 좋지 않은 자원 활용도를 보일 수밖에 없다. 따라서 일정 수준 이상의 규모가 되는 게임을 개발하기에는 아쉬움이 크다. 다행히 2018.1 버전부터 C# 잡 시스템(JobSystem)[* 최대 10개의 스레드가 작동한다. 발표에서 선보인 예제는 100만개 이상의 군세를 렉 없이 업데이트하고 렌더링하는 퍼포먼스를 보여주었다.]과 ECS[* 객체 지향이 아닌 데이터 지향으로 동작을 관여하는 스크립트가 객체마다 생성되었던 것을 1개로 줄여 인스턴싱 효과를 얻을 수 있는 시스템이다.]이라는 방법으로 멀티스레드를 이용한 병렬 처리를 지원한다. 하지만, 아직 문제가 많고 불안정해서 많은 개발자들이 지켜보고 있는 상황이다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기